package com.hy;

/**
 * Created With IntelliJ IDEA.
 * Descriptions:移除链表元素
 * 给你一个链表的头节点 head 和一个整数 val ，请你删除链表中所有满足 Node.val == val 的节点，并返回 新的头节点 。
 *
 * 示例 1：
 * 输入：head = [1,2,6,3,4,5,6], val = 6
 * 输出：[1,2,3,4,5]
 *
 * author: Mr.Du
 * Date: 2022/11/11
 * Time: 10:00
 */
public class RemoveElements {
    
    /**
     * 前提：链表这块大部分题型都可以设置一个前置结点再结合画图非常好解决
     * 思想：设置一个前置结点dummy，让的next结点是head，同时在定义一个pre(prev当前结点的前结点)结点，让它指向dummy(它是固定的，让它返回结果)
     * 我们直接遍历head，如果当前结点值等于val，那么，让pre的next结点直接指向head的next结点，然后head = head.next,
     * 不相等，两个都往后移动。画图最好解决
     * @param head
     * @param val
     * @return
     */
    public ListNode removeElements(ListNode head, int val){
        if(head == null) return null;
        ListNode dummy = new ListNode(-1,head);
        ListNode pre = dummy;
        while(head != null){
            if(head.val != val){
                pre = head;
            }else{
                pre.next = head.next;
            }
            head = head.next;
        }
        return dummy.next;
    }
}
